package com.tofacebook.mybatis.mapper;

import com.tofacebook.mybatis.model.Emp;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface EmpMapper {
    /**
     * 通过ID查询
     * @param empId
     * @return Emp
     */
    Emp getEmpById(@Param("empId") int empId);

    /**
     * 通过上面的方法查询出来的结果并没有赋值给对应的属性，问题出在哪里呢？？
     * 是不是   字段名与类中的属性名不一致导致？？  解决办法
     * 1.使用mysql的as 语法 就是取别名的方式
     * 2.通过mybatis-config.xml中的settings 设置字段下划线转驼峰
     * <settings><setting type="" value="true"></setting></settings>
     *
     * 3.使用resultMap去写字段与属性的映射关系
     */

    //1.使用mysql的as 语法 就是取别名的方式
    Emp getEmpByIdByAs(@Param("empId") int empId);
    //3.使用resultMap去实现  字段下换线转驼峰
    Emp getEmpByResultMap(@Param("empId") int empId);

    /**
     * 多对一
     * 1.级联关系
     * 2.使用association
     * 3.分步骤查询
     */

    /*
    多对一查询的第一种方式：级联关系
    empId 参数还会存放在Map集合里面
    map("empId",empId)
    map("param1",值)
     */
    Emp getEmpByEmpIdByDeptId(@Param("empId") long empId);

    /**
     * 多对一第二种方式 association
     */
    Emp getEmpByEmpIdByAssociation(@Param("empId") long empId);

    /**
     * 多对一第三种方式 在association中使用select去调用DeptMapper接口里面的方法
     */
    Emp getEmpByEmpIdByAssociationSelect(@Param("empId") long empId);

    /**
     * 一对多的第二步：根据部门id去获取员工信息
     * @param deptId
     * @return
     */
    List<Emp> queryEmpListByDeptId(@Param("deptId") long deptId);
}
